package dao

import (
	"go_web/project/model"
	"go_web/project/utils"
)

func AddCartItem(cartItem *model.CartItem) error {
	sqlStr := "insert into cart_itmes(count, amount, book_id, cart_id) values(?,?,?,?)"
	_, err := utils.Db.Exec(sqlStr, cartItem.Count, cartItem.GetAmount(), cartItem.Book.ID, cartItem.CartID)
	if err != nil {
		return err
	}
	return nil
}

func GetCartItemByBookIDAndCartID(bookID, cartID string) (*model.CartItem, error) {
	sqlStr := "select id,count,amount,cart_id from cart_itmes where book_id = ? and cart_id = ?"
	row := utils.Db.QueryRow(sqlStr, bookID, cartID)
	cartItem := &model.CartItem{}
	err := row.Scan(&cartItem.CartItemID, &cartItem.Count, &cartItem.Amount, &cartItem.CartID)
	if err != nil {
		return nil, err
	}
	book, _ := GetBookById(bookID)
	cartItem.Book = book
	return cartItem, nil
}

func UpdateBookCount(cartItem *model.CartItem) error {
	sql := "update cart_itmes set count = ?, amount = ? where book_id = ? and cart_id = ?"
	_, err := utils.Db.Exec(sql, cartItem.Count, cartItem.GetAmount(), cartItem.Book.ID, cartItem.CartID)
	if err != nil {
		return err
	}
	return nil
}

func GetCartItemsByCartID(cartID string) ([]*model.CartItem, error) {
	sqlStr := "select id,count,amount,book_id,cart_id from cart_itmes where cart_id = ?"
	rows, err := utils.Db.Query(sqlStr, cartID)
	if err != nil {
		return nil, err
	}
	var cartItems []*model.CartItem
	for rows.Next() {
		var bookID string
		cartItem := &model.CartItem{}
		err2 := rows.Scan(&cartItem.CartItemID, &cartItem.Count, &cartItem.Amount, &bookID, &cartItem.CartID)
		if err2 != nil {
			return nil, err2
		}
		book, _ := GetBookById(bookID)
		cartItem.Book = book
		cartItems = append(cartItems, cartItem)
	}
	return cartItems, nil
}

func DeleteCartItemsByCartID(cartID string) error {
	sql := "delete from cart_itmes where cart_id = ?"
	_, err := utils.Db.Exec(sql, cartID)
	if err != nil {
		return err
	}
	return nil
}
func DeleteCartByCartID(cartID string) error {
	err := DeleteCartItemsByCartID(cartID)
	if err != nil {
		return err
	}
	sql := "delete from carts where id = ?"
	_, err2 := utils.Db.Exec(sql, cartID)
	if err2 != nil {
		return err2
	}
	return nil
}
func DeleteCartItemByID(cartItemID string) error {
	sql:="delete from cart_itmes where id = ?"
	_, err := utils.Db.Exec(sql, cartItemID)
	if err != nil {
		return err
	}
	return nil
}